package com.leave.mos.service.impl;

import com.leave.mos.constant.TablenameConstant;
import com.leave.mos.entity.User;
import com.leave.mos.service.MongodbInsertService;
import org.springframework.data.mongodb.core.ExecutableInsertOperation;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

@Service
public class MongodbInsertServiceImpl implements MongodbInsertService {

    @Resource
    private MongoTemplate mongoTemplate;

    /**
     * 使用默认的保存数据
     *
     * @param user
     * @return
     * @de 1.如果数据库中没有和这个类名相同的集合，会自动创建一个类名小写的默认集合。
     * 2.如果存在和这个类名小写相同的集合，会自动插入到这个集合中。
     */
    @Override
    public User insert(User user) {

        User userDb = mongoTemplate.insert(user);
        return userDb;
    }

    /**
     * 保存到确定的集合中
     *
     * @param user
     * @return
     * @de 1.会把数据保存到这个集合中；每调用一次会生成一条记录。
     * 2.id值是mongodb数据库自动生成的唯一值。
     */
    @Override
    public User insertTable(User user) {

        User userDb = mongoTemplate.insert(user, TablenameConstant.Testdef.TableName);
        return userDb;
    }

    @Override
    public User insertClass(User user) {

        ExecutableInsertOperation.ExecutableInsert user1 = mongoTemplate.insert(User.class);
        System.out.println(user1);
        return user;
    }


    /**
     * 1.批量插入数据
     * 2.如果有id重复的数据，抛出异常。
     * 3.如果没有id值和库中集合id重复的文档则保存成功。
     * @param users
     * @return
     */
    @Override
    public Collection<User> insertBatchClass(User users) {

        List<User> coll = new ArrayList<>();
        coll.add(new User("1","a","12a"));
        coll.add(new User("11","aa","12aa"));
        coll.add(new User(users.getId(),"aaa","12aaa"));

        Collection<User> users1 = mongoTemplate.insert(coll, User.class);

        return users1;
    }


    /**
     * 1.批量插入数据
     * 2.如果有id重复的数据，抛出异常。
     * 3.如果没有id值和库中集合id重复的文档则保存成功。
     * @param users
     * @return
     */
    @Override
    public Collection<User> insertBatchTable(User users) {

        List<User> coll = new ArrayList<>();
        coll.add(new User("1","a","12a"));
        coll.add(new User("11","aa","12aa"));
        coll.add(new User(users.getId(), "aaa","12aaa"));

        Collection<User> users1 = mongoTemplate.insert(coll, TablenameConstant.Testdef.TableName);
        return users1;
    }


    /**
     * 1.批量插入数据
     * 2.如果有id重复的数据，抛出异常。
     * 3.如果没有id值和库中集合id重复的文档则保存成功。
     * @param users
     * @return
     */
    @Override
    public Collection<User> insertAll(User users) {

        List<User> coll = new ArrayList<>();
        coll.add(new User("1","a","12a"));
        coll.add(new User("11","aa","12aa"));
        coll.add(new User(users.getId(), "aaa","12aaa"));

        Collection<User> users1 = mongoTemplate.insertAll(coll);
        return users1;
    }



}
